home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre1.z / postgre1 / demo / circle.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  1.2 KB  |  69 lines

  1. #include <stdio.h>
  2. #include "tmp/libpq-fe.h"
  3. #include "utils/geo-decls.h"
  4.  
  5. typedef struct {
  6.     POINT    center;
  7.     double    radius;
  8. } CIRCLE;
  9.  
  10. CIRCLE    *circle_in();
  11. char    *circle_out();
  12. int    pt_in_circle();
  13.  
  14. #define LDELIM    '('
  15. #define RDELIM    ')'
  16. #define NARGS    3
  17.  
  18. CIRCLE *
  19. circle_in(str)
  20. char    *str;
  21. {
  22.     double    atof(), tmp;
  23.     char    *strcpy(), *p,
  24.         *coord[NARGS], buf2[1000];
  25.     int    i, fd;
  26.     CIRCLE    *result;
  27.  
  28.     if (str == NULL)
  29.         return(NULL);
  30.     for (i = 0, p = str; *p && i < NARGS && *p != RDELIM; p++)
  31.         if (*p == ',' || (*p == LDELIM && !i))
  32.             coord[i++] = p + 1;
  33.     if (i < NARGS - 1)
  34.         return(NULL);
  35.     result = (CIRCLE *) palloc(sizeof(CIRCLE));
  36.     result->center.x = atof(coord[0]);
  37.     result->center.y = atof(coord[1]);
  38.     result->radius = atof(coord[2]);
  39.  
  40.     sprintf(buf2, "circle_in: read (%f, %f, %f)\n", result->center.x,
  41.     result->center.y,result->radius);
  42.     return(result);
  43. }
  44.  
  45. char *
  46. circle_out(circle)
  47. CIRCLE    *circle;
  48. {
  49.     char    *result;
  50.  
  51.     if (circle == NULL)
  52.         return(NULL);
  53.  
  54.     result = (char *) palloc(60);
  55.     (void) sprintf(result, "(%g,%g,%g)",
  56.                circle->center.x, circle->center.y, circle->radius);
  57.     return(result);
  58. }
  59.  
  60. int
  61. pt_in_circle(point, circle)
  62.     POINT    *point;
  63.     CIRCLE    *circle;
  64. {
  65.     extern double    point_dt();
  66.  
  67.     return( point_dt(point, &circle->center) < circle->radius );
  68. }
  69.